home *** CD-ROM | disk | FTP | other *** search
/ CYBER.XPO.95 / CYBER.XPO.95 (Arsenal Computer).ISO / popreq / amiga1 / a1000hks.lha / ykick / zkf2kf.c < prev   
C/C++ Source or Header  |  1991-07-27  |  4KB  |  128 lines

  1. /*
  2.  *  ZKickFile <--> Commodore Kickstart file converter
  3.  *
  4.  *  (c)Copyright 1993 by Tobias Ferber, All Rights Reserved
  5.  */
  6.  
  7. #include <stdio.h>
  8.  
  9. main(int argc, char *argv[])
  10. {
  11.   int err=0;
  12.  
  13.   if(argc < 3)
  14.     printf("Usage:  %s ZKickFile Kickstart    (ZKickFile --> Kickstart)\n"
  15.            "        %s Kickstart ZKickFile    (Kickstart --> ZKickFile)\n",
  16.            argv[0],argv[0]);
  17.   else
  18.   { FILE *fp= fopen(argv[1],"r");
  19.     err=20;
  20.     if(fp)
  21.     { long fsize;
  22.       fseek(fp,0,2);
  23.       fsize= ftell(fp);
  24.       switch(fsize)
  25.       { 
  26.         case 512*1024+8: /* ZKickFile */
  27.           { long *fmem= (long *)malloc(fsize);
  28.             if(fmem)
  29.             { long n;
  30.               printf("loading ZKick file \"%s\" (%d bytes) to $%06lx, ",
  31.                 argv[1],fsize,fmem);
  32.               fflush(stdout);
  33.               fseek(fp,0,0);
  34.               n= fread(fmem,1,fsize,fp);
  35.               fclose(fp);
  36.               if(n==fsize)
  37.               { puts("ok.");
  38.                 fp= fopen(argv[2],"r");
  39.                 if(fp)
  40.                 { char c;
  41.                   fclose(fp);
  42.                   printf("\"%s\" already exists, overwrite? (Y/n): ",argv[2]);
  43.                   fflush(stdout);
  44.                   c= getchar();
  45.                   if(c=='n' || c=='N')
  46.                     n=0;
  47.                 }
  48.                 if(n!=0)
  49.                 { fp= fopen(argv[2],"w");
  50.                   if(fp)
  51.                   { printf("writing Commodore Kickstart file, ");
  52.                     fflush(stdout);
  53.                     n= fwrite(&fmem[2],1,fsize-8,fp);
  54.                     fclose(fp);
  55.                     if(n==fsize-8)
  56.                     { puts("ok.");
  57.                       err=0; /* don't write */
  58.                     }
  59.                     else puts("error.");
  60.                   }
  61.                   else printf("Can't write to %s\n",argv[2]);
  62.                 }
  63.               }
  64.               else puts("error.");
  65.               free(fmem);
  66.             }
  67.             else puts("Out of memory!");
  68.           }
  69.           break;
  70.  
  71.         case 512*1024: /* Commodore Kickstart file */
  72.           { long *fmem= (long *)malloc(fsize+8);
  73.             if(fmem)
  74.             { long n;
  75.               printf("loading Commodore Kickstart file \"%s\" (%d bytes) to $%06lx, ",
  76.                 argv[1],fsize,fmem);
  77.               fflush(stdout);
  78.               fseek(fp,0,0);
  79.               fmem[0]= 0x00000000;
  80.               fmem[1]= 0x00080000;
  81.               n= fread(&fmem[2],1,fsize,fp);
  82.               fclose(fp);
  83.               if(n==fsize)
  84.               { puts("ok.");
  85.                 fp= fopen(argv[2],"r");
  86.                 if(fp)
  87.                 { char c;
  88.                   fclose(fp);
  89.                   printf("\"%s\" already exists, overwrite? (Y/n): ",argv[2]);
  90.                   fflush(stdout);
  91.                   c= getchar();
  92.                   if(c=='n' || c=='N')
  93.                     n=0;
  94.                 }
  95.                 if(n!=0)
  96.                 { fp= fopen(argv[2],"w");
  97.                   if(fp)
  98.                   { printf("writing ZKick file, ");
  99.                     fflush(stdout);
  100.                     n= fwrite(&fmem[0],1,fsize+8,fp);
  101.                     fclose(fp);
  102.                     if(n==fsize+8)
  103.                     { puts("ok.");
  104.                       err=0;
  105.                     }
  106.                     else puts("error.");
  107.                   }
  108.                   else printf("Can't write to %s\n",argv[2]);
  109.                 }
  110.               }
  111.               else puts("error.");
  112.               free(fmem);
  113.             }
  114.             else puts("Out of memory!");
  115.           }
  116.           break;
  117.  
  118.         default:
  119.           printf("Failure -- Unknown Kickstart file \"%s\"  (%d bytes)\n",
  120.             argv[1],fsize);
  121.           break;
  122.       }
  123.     }
  124.     else printf("Can't open %s\n",argv[1]);
  125.   }
  126.   exit(err);
  127. }
  128.